package jp.joogoo.web.service;

import java.util.Collections;
import java.util.List;

import jp.joogoo.web.meta.M_joogooMeta;
import jp.joogoo.web.model.M_joogoo;
import jp.joogoo.web.model.M_service;

import org.slim3.datastore.Datastore;

import com.google.appengine.api.users.User;

public class AuthorizeService {

    private static final M_joogooMeta meta = new M_joogooMeta();

    public boolean isAuthorized(User user) {
        // TODO 結果をキャッシュするなどの工夫が必要。
        // 引数は User ではなく String の方がよいかも。クライアントアプリからのアクセスを考えると常にログイン状態だとは限らないため。
        return Datastore.query(meta).filter(meta.userId.equal(user.getUserId())).count() > 0;
    }

    public boolean authorize(User user, M_service provider) {
        // 引数は User ではなく String の方がよいかも。クライアントアプリからのアクセスを考えると常にログイン状態だとは限らないため。
        // TODO 実装する。
        return true;
    }

    public List<M_joogoo> getAccounts(String userId) {
        if (userId == null || userId.length() == 0) {
            return Collections.emptyList();
        }
        List<M_joogoo> accounts = Datastore.query(meta)
                                           .filter(meta.userId.equal(userId))
                                           .asList();
        if (accounts == null) {
            return Collections.emptyList();
        }
        return accounts;
    }

    public List<M_joogoo> getAllAccounts() {
        // TODO M_joogoo の型に状態情報を追加して、それもフィルタにかける。valid なものだけ使う。
        List<M_joogoo> accounts = Datastore.query(meta).asList();
        if (accounts == null) {
            return Collections.emptyList();
        }
        return accounts;
    }
}
